﻿using System.Collections.Generic;

namespace Bio.Structure
{
    /// <summary>
    /// Implementation of Atom, making up one of the core sets of data structures for the Structure library in Bio.
    /// </summary>
    public interface IAtom
    {
        /// <summary>
        /// Gets the element for this atom such as H, Li, Be.
        /// </summary>
        Element Type { get; }

        /// <summary>
        /// Gets the coordinates for this element, such as [1.242f,3.234f,1.342f]
        /// </summary>
        float[] Coords { get; }

        /// <summary>
        /// Gets the crystallographic B Factor or temperature factor of the atom.
        /// This value is commonly used for the atom, vital for analysis, and is thus available explicitly, outside of the metadata.
        /// </summary>
        float BFactor { get; }

        /// <summary>
        /// Get or set the optional parent for easy access to the Group reference to which the atom belongs.
        /// </summary>
        IGroup ParentGroup { get; set; }

        /// <summary>
        /// Gets the dictionary of metadata for this Atom.
        /// There are currently no standard metadata for this object.
        /// </summary>
        IDictionary<string, object> Metadata { get; }
    }
}
